home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / lib / python2.4 / xml / sax / saxutils.pyo (.txt) < prev    next >
Python Compiled Bytecode  |  2005-10-18  |  12KB  |  333 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyo (Python 2.4)
  3.  
  4. '''A library of useful helper classes to the SAX classes, for the
  5. convenience of application and driver writers.
  6. '''
  7. import os
  8. import urlparse
  9. import urllib
  10. import types
  11. import handler
  12. import xmlreader
  13.  
  14. try:
  15.     _StringTypes = [
  16.         types.StringType,
  17.         types.UnicodeType]
  18. except AttributeError:
  19.     _StringTypes = [
  20.         types.StringType]
  21.  
  22.  
  23. try:
  24.     from codecs import xmlcharrefreplace_errors
  25.     _error_handling = 'xmlcharrefreplace'
  26.     del xmlcharrefreplace_errors
  27. except ImportError:
  28.     _error_handling = 'strict'
  29.  
  30.  
  31. def __dict_replace(s, d):
  32.     '''Replace substrings of a string using a dictionary.'''
  33.     for key, value in d.items():
  34.         s = s.replace(key, value)
  35.     
  36.     return s
  37.  
  38.  
  39. def escape(data, entities = { }):
  40.     '''Escape &, <, and > in a string of data.
  41.  
  42.     You can escape other strings of data by passing a dictionary as
  43.     the optional entities parameter.  The keys and values must all be
  44.     strings; each key will be replaced with its corresponding value.
  45.     '''
  46.     data = data.replace('&', '&')
  47.     data = data.replace('>', '>')
  48.     data = data.replace('<', '<')
  49.     if entities:
  50.         data = __dict_replace(data, entities)
  51.     
  52.     return data
  53.  
  54.  
  55. def unescape(data, entities = { }):
  56.     '''Unescape &, <, and > in a string of data.
  57.  
  58.     You can unescape other strings of data by passing a dictionary as
  59.     the optional entities parameter.  The keys and values must all be
  60.     strings; each key will be replaced with its corresponding value.
  61.     '''
  62.     data = data.replace('<', '<')
  63.     data = data.replace('>', '>')
  64.     if entities:
  65.         data = __dict_replace(data, entities)
  66.     
  67.     return data.replace('&', '&')
  68.  
  69.  
  70. def quoteattr(data, entities = { }):
  71.     '''Escape and quote an attribute value.
  72.  
  73.     Escape &, <, and > in a string of data, then quote it for use as
  74.     an attribute value.  The " character will be escaped as well, if
  75.     necessary.
  76.  
  77.     You can escape other strings of data by passing a dictionary as
  78.     the optional entities parameter.  The keys and values must all be
  79.     strings; each key will be replaced with its corresponding value.
  80.     '''
  81.     data = escape(data, entities)
  82.     if '"' in data:
  83.         if "'" in data:
  84.             data = '"%s"' % data.replace('"', '"')
  85.         else:
  86.             data = "'%s'" % data
  87.     else:
  88.         data = '"%s"' % data
  89.     return data
  90.  
  91.  
  92. class XMLGenerator(handler.ContentHandler):
  93.     
  94.     def __init__(self, out = None, encoding = 'iso-8859-1'):
  95.         if out is None:
  96.             import sys as sys
  97.             out = sys.stdout
  98.         
  99.         handler.ContentHandler.__init__(self)
  100.         self._out = out
  101.         self._ns_contexts = [
  102.             { }]
  103.         self._current_context = self._ns_contexts[-1]
  104.         self._undeclared_ns_maps = []
  105.         self._encoding = encoding
  106.  
  107.     
  108.     def _write(self, text):
  109.         if isinstance(text, str):
  110.             self._out.write(text)
  111.         else:
  112.             self._out.write(text.encode(self._encoding, _error_handling))
  113.  
  114.     
  115.     def startDocument(self):
  116.         self._write('<?xml version="1.0" encoding="%s"?>\n' % self._encoding)
  117.  
  118.     
  119.     def startPrefixMapping(self, prefix, uri):
  120.         self._ns_contexts.append(self._current_context.copy())
  121.         self._current_context[uri] = prefix
  122.         self._undeclared_ns_maps.append((prefix, uri))
  123.  
  124.     
  125.     def endPrefixMapping(self, prefix):
  126.         self._current_context = self._ns_contexts[-1]
  127.         del self._ns_contexts[-1]
  128.  
  129.     
  130.     def startElement(self, name, attrs):
  131.         self._write('<' + name)
  132.         for name, value in attrs.items():
  133.             self._write(' %s=%s' % (name, quoteattr(value)))
  134.         
  135.         self._write('>')
  136.  
  137.     
  138.     def endElement(self, name):
  139.         self._write('</%s>' % name)
  140.  
  141.     
  142.     def startElementNS(self, name, qname, attrs):
  143.         if name[0] is None:
  144.             name = name[1]
  145.         else:
  146.             name = self._current_context[name[0]] + ':' + name[1]
  147.         self._write('<' + name)
  148.         for pair in self._undeclared_ns_maps:
  149.             self._write(' xmlns:%s="%s"' % pair)
  150.         
  151.         self._undeclared_ns_maps = []
  152.         for name, value in attrs.items():
  153.             name = self._current_context[name[0]] + ':' + name[1]
  154.             self._write(' %s=%s' % (name, quoteattr(value)))
  155.         
  156.         self._write('>')
  157.  
  158.     
  159.     def endElementNS(self, name, qname):
  160.         if name[0] is None:
  161.             name = name[1]
  162.         else:
  163.             name = self._current_context[name[0]] + ':' + name[1]
  164.         self._write('</%s>' % name)
  165.  
  166.     
  167.     def characters(self, content):
  168.         self._write(escape(content))
  169.  
  170.     
  171.     def ignorableWhitespace(self, content):
  172.         self._write(content)
  173.  
  174.     
  175.     def processingInstruction(self, target, data):
  176.         self._write('<?%s %s?>' % (target, data))
  177.  
  178.  
  179.  
  180. class XMLFilterBase(xmlreader.XMLReader):
  181.     """This class is designed to sit between an XMLReader and the
  182.     client application's event handlers.  By default, it does nothing
  183.     but pass requests up to the reader and events on to the handlers
  184.     unmodified, but subclasses can override specific methods to modify
  185.     the event stream or the configuration requests as they pass
  186.     through."""
  187.     
  188.     def __init__(self, parent = None):
  189.         xmlreader.XMLReader.__init__(self)
  190.         self._parent = parent
  191.  
  192.     
  193.     def error(self, exception):
  194.         self._err_handler.error(exception)
  195.  
  196.     
  197.     def fatalError(self, exception):
  198.         self._err_handler.fatalError(exception)
  199.  
  200.     
  201.     def warning(self, exception):
  202.         self._err_handler.warning(exception)
  203.  
  204.     
  205.     def setDocumentLocator(self, locator):
  206.         self._cont_handler.setDocumentLocator(locator)
  207.  
  208.     
  209.     def startDocument(self):
  210.         self._cont_handler.startDocument()
  211.  
  212.     
  213.     def endDocument(self):
  214.         self._cont_handler.endDocument()
  215.  
  216.     
  217.     def startPrefixMapping(self, prefix, uri):
  218.         self._cont_handler.startPrefixMapping(prefix, uri)
  219.  
  220.     
  221.     def endPrefixMapping(self, prefix):
  222.         self._cont_handler.endPrefixMapping(prefix)
  223.  
  224.     
  225.     def startElement(self, name, attrs):
  226.         self._cont_handler.startElement(name, attrs)
  227.  
  228.     
  229.     def endElement(self, name):
  230.         self._cont_handler.endElement(name)
  231.  
  232.     
  233.     def startElementNS(self, name, qname, attrs):
  234.         self._cont_handler.startElementNS(name, qname, attrs)
  235.  
  236.     
  237.     def endElementNS(self, name, qname):
  238.         self._cont_handler.endElementNS(name, qname)
  239.  
  240.     
  241.     def characters(self, content):
  242.         self._cont_handler.characters(content)
  243.  
  244.     
  245.     def ignorableWhitespace(self, chars):
  246.         self._cont_handler.ignorableWhitespace(chars)
  247.  
  248.     
  249.     def processingInstruction(self, target, data):
  250.         self._cont_handler.processingInstruction(target, data)
  251.  
  252.     
  253.     def skippedEntity(self, name):
  254.         self._cont_handler.skippedEntity(name)
  255.  
  256.     
  257.     def notationDecl(self, name, publicId, systemId):
  258.         self._dtd_handler.notationDecl(name, publicId, systemId)
  259.  
  260.     
  261.     def unparsedEntityDecl(self, name, publicId, systemId, ndata):
  262.         self._dtd_handler.unparsedEntityDecl(name, publicId, systemId, ndata)
  263.  
  264.     
  265.     def resolveEntity(self, publicId, systemId):
  266.         return self._ent_handler.resolveEntity(publicId, systemId)
  267.  
  268.     
  269.     def parse(self, source):
  270.         self._parent.setContentHandler(self)
  271.         self._parent.setErrorHandler(self)
  272.         self._parent.setEntityResolver(self)
  273.         self._parent.setDTDHandler(self)
  274.         self._parent.parse(source)
  275.  
  276.     
  277.     def setLocale(self, locale):
  278.         self._parent.setLocale(locale)
  279.  
  280.     
  281.     def getFeature(self, name):
  282.         return self._parent.getFeature(name)
  283.  
  284.     
  285.     def setFeature(self, name, state):
  286.         self._parent.setFeature(name, state)
  287.  
  288.     
  289.     def getProperty(self, name):
  290.         return self._parent.getProperty(name)
  291.  
  292.     
  293.     def setProperty(self, name, value):
  294.         self._parent.setProperty(name, value)
  295.  
  296.     
  297.     def getParent(self):
  298.         return self._parent
  299.  
  300.     
  301.     def setParent(self, parent):
  302.         self._parent = parent
  303.  
  304.  
  305.  
  306. def prepare_input_source(source, base = ''):
  307.     '''This function takes an InputSource and an optional base URL and
  308.     returns a fully resolved InputSource object ready for reading.'''
  309.     if type(source) in _StringTypes:
  310.         source = xmlreader.InputSource(source)
  311.     elif hasattr(source, 'read'):
  312.         f = source
  313.         source = xmlreader.InputSource()
  314.         source.setByteStream(f)
  315.         if hasattr(f, 'name'):
  316.             source.setSystemId(f.name)
  317.         
  318.     
  319.     if source.getByteStream() is None:
  320.         sysid = source.getSystemId()
  321.         basehead = os.path.dirname(os.path.normpath(base))
  322.         sysidfilename = os.path.join(basehead, sysid)
  323.         if os.path.isfile(sysidfilename):
  324.             source.setSystemId(sysidfilename)
  325.             f = open(sysidfilename, 'rb')
  326.         else:
  327.             source.setSystemId(urlparse.urljoin(base, sysid))
  328.             f = urllib.urlopen(source.getSystemId())
  329.         source.setByteStream(f)
  330.     
  331.     return source
  332.  
  333.